/**
 * 
 */
package compilador.analizadorSintactico.categoriasSintacticas;

import javax.swing.tree.DefaultMutableTreeNode;

import compilador.analizadorLexico.simbolos.SimboloLexico;

/**
 * @author Nolberto Castellanos Rodriguez
 * @author Yurani Alejandra Salamanca Lotero
 *
 * Clase que representa un TipoDato
 */
public class TipoDato {
	
//	-------------------------------------------------------------------------------------------------
//	ATRIBUTOS
//	-------------------------------------------------------------------------------------------------
	
	/**
	 * Atributo que representa el tipo de dato
	 */
	private SimboloLexico tipoDato;
	
	
	
//	-------------------------------------------------------------------------------------------------
//	CONSTRUCTOR
//	-------------------------------------------------------------------------------------------------	

	/**
	 * Constructor que permite crear un tipo de dato
	 * @param tipoDato. Tipo de dato que se va a usar
	 */
	public TipoDato(SimboloLexico tipoDato)
	{
		this.tipoDato = tipoDato;
	}

	
//	-------------------------------------------------------------------------------------------------
//	METODOS
//	-------------------------------------------------------------------------------------------------	
	
	/**
	 * Metodo que permite agregar hojas al nodo de la clase
	 * @return el nodo de la clase con sus hojas
	 */
	public DefaultMutableTreeNode getArbolVisual(){
		DefaultMutableTreeNode miRaiz =  new  DefaultMutableTreeNode("Tipo de dato");
		miRaiz.add(new DefaultMutableTreeNode(tipoDato.getLexema()));
		
		return miRaiz;
	}


	/**
	 * @return
	 */
	public String getJavaCode()
	{
		
		if(tipoDato.getLexema().equals("int"))
			return "int";
		
		if(tipoDato.getLexema().equals("rat"))
			return "double";
		
		if(tipoDato.getLexema().equals("str"))
			return "String";
		
		return "";
	}

	
//	-------------------------------------------------------------------------------------------------
//	Getters & Setters
//	-------------------------------------------------------------------------------------------------	


	/**
	 * Metodo que nos retorna el valor de tipoDato
	 * @return  tipoDato. Valor retornado
	 */
	public SimboloLexico getTipoDato() {
		return tipoDato;
	}


	/**
	 * Metodo que permite asignar el valor de tipoDato
	 * @param tipoDato. Valor a asignar tipoDato
	 */
	public void setTipoDato(SimboloLexico tipoDato) {
		this.tipoDato = tipoDato;
	}
	
	
}
